package org.hq.mapper.utils;
import org.hq.pojo.WebUser;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

@SpringBootTest
public class RedisSet {
    @Autowired
    private RedisTemplate<String, Object> redis;

    @Test
    void opsForSetAdd() {
        // 向key对应的value值中批量添加值，可以是集合、数组、多参数
        List list = new ArrayList();
        list.add("lcy");
        list.add("jyqc");
        redis.opsForSet().add("loginuser:root","sliut2345");

    }
    @Test
    void opsForValueSet(){
        Set set = redis.opsForSet().members("loginuser:root");
        for(Object o : set){
            System.out.println(o);
        }
      System.out.println(set.size());

    }
    @Test
    void opsForValueGet(){
        WebUser userkey = (WebUser) redis.opsForValue().get("root");
        System.out.println("user:    " + userkey.getUsername());
    }

  //  向集合左边添加元素值
    @Test
    void opsForList_leftPush(){
        // 添加完之后，在list中是这样的：[c,b,a]
        redis.opsForList().leftPush("list","a");
        redis.opsForList().leftPush("list","b");
        redis.opsForList().leftPush("list","c");
    }
//向集合左边批量添加元素，参数可以是数组、多参数、集合
    @Test
    void opsForList_leftPushAll(){
// 整个过程完之后，list中是这样的：[3,2,1,a]
        redis.opsForList().leftPush("list","s");
        List list  = new LinkedList();
        list.add("1");
        list.add("2");
        list.add("3");
        redis.opsForList().leftPushAll("list",list);


    }
    //移除 第一个元素
    @Test
    void opsForList_leftPop(){

        // 移除之后，str为b，list中剩余元素为：a
        String str = (String) redis.opsForList().leftPop("list");
        System.out.println(str);
      //  既然有左边的操作，那肯定也有右边的操作，即把上诉方法的left改成right即可。


    }
    //移除 最后一个元素
    @Test
    void opsForList_right(){

        // 移除之后，str为b，list中剩余元素为：a
        String str = (String) redis.opsForList().rightPop("list");
        System.out.println(str);
    }
    //移除 索引移除
    @Test
    void opsForList_remove(){

        // 移除索引 2 值 为 b 返回 1 成功 返回 0 失败
        Long l = redis.opsForList().remove("list", 2, "b");
         System.out.println(l);
    }
    //获取 list 集合大小
    @Test
    void opsForList_size(){

        // 移除索引 2 值 为 b 返回 1 成功 返回 0 失败
        Long l = redis.opsForList().size("list");
        System.out.println(l);
    }

    @Test
    public void clearAllDatabases() {
        //清空数据库
        redis.getConnectionFactory().getConnection().flushAll();
    }

    /**
     * 删除 key 建
     */
    @Test
    void deletekey() {
        redis.delete("lian");

    }
    @Test
    void getkey() {
       for (int i=0;i<100000000;i++){
           redis.opsForList().leftPush("list","for"+i);
       }

    }



}
